package com.qf.service.impl;

import com.qf.dao.ProductCategoryDao;
import com.qf.dao.ProductInfoDao;
import com.qf.dto.ProductDTO;
import com.qf.entity.ProductCategory;
import com.qf.entity.ProductInfo;
import com.qf.enums.ProductInfoEnum;
import com.qf.exception.WxException;
import com.qf.service.ProductInfoService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

/**
 * 2019/10/14
 * Administrator
 * springbootapp1014
 * 面向对象面向君  不负代码不负卿
 */
@Service
public class ProductInfoServiceImpl implements ProductInfoService {

    @Resource
    private ProductInfoDao infoDao;

    @Resource
    private ProductCategoryDao categoryDao;

    @Override
    public List<ProductDTO> findList() {
        //1.查询上架的商品列表
        List<ProductInfo> productInfoList =
                infoDao.getUpList(ProductInfoEnum.UP.getCode());
        if (productInfoList == null) {
            throw new WxException("上架商品不存在");
        }
        //2.从商品列表中得到类型id
        Set set=new HashSet();
        for (ProductInfo productInfo : productInfoList) {
            set.add(productInfo.getCategoryType());
        }
        //3.根据类型的id查询类型的名
        Map map=new HashMap();
        map.put("typeids",set);
        List<ProductCategory> categoryList = categoryDao.findbyids(map);
        //4.将类型的集合和商品列表集合做匹配
        List<ProductDTO> productdtoList=new ArrayList<ProductDTO>();
        for (ProductCategory category : categoryList) {
            List type_datalist=new ArrayList();//保存每一种商品类型所对应的商品列表
            for (ProductInfo productInfo : productInfoList) {
                if(productInfo.getCategoryType()==category.getCategoryType()){
                      type_datalist.add(productInfo);
                }
            }
            //进行dto封装
            ProductDTO productDTO = new ProductDTO();
            productDTO.setName(category.getCategoryName());
            productDTO.setType(category.getCategoryType());
            productDTO.setFoods(type_datalist);
            productdtoList.add(productDTO);
        }
        return productdtoList;
    }
}
